package command;

import java.util.NoSuchElementException;

import org.uc3m.ed.factory.panel.FactoriaPanel;
import org.uc3m.ed.implementacion.ComandoUtilizado;
import org.uc3m.ed.implementacion.Command;
import org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo;
import org.uc3m.ed.interfaz_grafica.ventana.VentanaPrincipal;
import org.uc3m.ed.tad.arbol.Heap;

public class CommandEliminarNodo implements Command {

	/* (non-Javadoc)
	 * @see org.uc3m.ed.implementacion.Command#execute()
	 */
	public void execute() {
		try{
			PanelDibujo panel= FactoriaPanel.metodoFactoria();
			Heap<Integer,Integer> abb=(Heap<Integer,Integer>) panel.getEstructura();

			VentanaPrincipal.getConsola().limpiarConsola();
			
			if (abb!=null){	
				try{
					if(abb.extraer()!=null){
						
						panel.setEstructura(abb);
						panel.getPilaComandos().push(new ComandoUtilizado("B",""));
						
					}else
						VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::CommandEliminarNodo ERROR::6\n   El elemento introducido no existe");
					
					panel.setDimensionDefecto();
					panel.repaint();
				}catch(NumberFormatException e){
					VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::CommandEliminarNodo ERROR::1\n   No has introducido un valor numerico en la secuencia: "+e.getMessage());
				}catch(NoSuchElementException e){
					VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::CommandEliminarNodo ERROR::2\n  Lista Vacia");
				}
			}	
			else
				VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::CommandEliminarNodo ERROR::5\n   Debes crear un Heap antes de extraer un elemento");
			
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::CommandEliminarNodo ERROR::3::"+e.toString()+"\n",e.getStackTrace());
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::CommandEliminarNodo ERROR::4::"+e.toString()+"\n",e.getStackTrace());
		}
	}

}
